package com.esd.db.service;

import java.util.List;
import java.util.Map;

import com.esd.db.model.VtdArticle;
import com.esd.db.model.VtdComment;

/**
 * 交流区文章评论用service 
 */
public interface ArticleService {
	
	/**
	 * 保存
	 */
	int saveArticle(VtdArticle article);
	
	/**
	 * 查询未审核文章数 
	 */
	int getWaitInspArticleCount();
	
	/**
	 * 查询文章列表  分页
	 * @param articleTitle 文章标题
	 * @param createUsername  创建人用户名
	 * @param isDelete  是否删除 1是 0否  null不查询
	 * @param isGranted 是否通过审核  1是 0否  null不查询
	 * @param isLocked  是否禁止评论  1是 0否  null不查询
	 * @param isTop   是否置顶  1是 0否  null不查询
	 * @param page  页数
	 * @param row   行数
	 * @return  VtdArticle List
	 */
	List<VtdArticle> getArticleListByCondition(String articleTitle, String createUsername, Integer isDelete, 
			Integer isGranted, Integer isLocked, Integer isTop, int page, int row);
	
	/**
	 * 查询文章列表 总数
	 * @param articleTitle 文章标题
	 * @param createUsername  创建人用户名
	 * @param isDelete  是否删除 1是 0否  null不查询
	 * @param isGranted 是否通过审核  1是 0否  null不查询
	 * @param isLocked  是否禁止评论  1是 0否  null不查询
	 * @param isTop   是否置顶  1是 0否  null不查询
	 * @return  int 
	 */
	int getArticleListByConditionCount(String articleTitle, String createUsername, Integer isDelete, 
			Integer isGranted, Integer isLocked, Integer isTop);
	
	/**
	 * 根据id查询
	 * @param id
	 * @return
	 */
	VtdArticle selectById(String id);
	
	/**
	 * 修改文章删除状态
	 * @param id
	 * @param userId
	 * @return
	 */
	int changeDeleteStatus(String id, int isDelete, int userId);
	
	/**
	 * 修改文章审核状态
	 * @param id
	 * @param userId
	 * @return
	 */
	int changeInspStatus(String id, int isGranted, int userId);
	
	/**
	 * 修改置顶状态
	 * @param id
	 * @param userId
	 * @return
	 */
	int changeTopStatus(String id, int isTop, int userId);
	
	/**
	 * 修改开启评论状态
	 * @param id
	 * @param userId
	 * @return
	 */
	int changeLockStatus(String id, int isLocked, int userId);
	
	/**
	 * 管理员保存文章
	 */
	int managerSaveArticle(VtdArticle article);
	
	/**
	 * 根据userid查询文章列表
	 */
	List<VtdArticle> getArticleListByUserId(String title, int userId, int page, int row);
	
	/**
	 * 根据userid查询文章总数
	 */
	int getArticleListByUserIdCount(int userId, String title);
	
	/**
	 * 根据id修改文章内容和标题
	 * @param title
	 * @param content
	 * @param id
	 * @param operatorId
	 * @return
	 */
	int updateTitleAndContentByArticleId(String articleTitle, String articleContent, String articleId, int userId);
	
	/**
	 * 保存文章评论
	 */
	int saveComment(VtdComment comment);
	
	/**
	 * 根据文章id查找评论  时间倒序排列
	 */
	List<VtdComment> findCommentsByArticleId(String articleId);
	
	/**
	 * 根据id查询评论
	 * @param id
	 * @return
	 */
	VtdComment findCommentById(String id);
	
	/**
	 * 根据Pid查询评论的回复
	 * @param id
	 * @return
	 */
	List<VtdComment> findCommentReplysByPid(String pid);
	
	/**
	 * 查询待审核的评论
	 * @param page
	 * @param row
	 * @return
	 */
	List<VtdComment> getCommentListForInspection(int page, int row);
	
	/**
	 * 查询待审核的评论总数
	 * @return
	 */
	int getCommentListForInspectionCount();
	
	/**
	 * 删除评论
	 * @param id
	 * @return
	 */
	int deleteComment(String id);
	
	/**
	 * 评论审核通过
	 * @param id
	 * @return
	 */
	int commentIsGranted(String id);
	
	/**
	 * 根据文章id查询评论总数 不包过被删除的
	 * @return
	 */
	int getTotleCommentNum(String artecleId);
	
	/**
	 * 根据userid查询该用户下的未读信息
	 * @param userId
	 * @return
	 */
	int getUnreadMsgNumByUserId(int userId);
	
	/**
	 * 消息提醒查询列表  查询所有回复的列表 包括文章的回复和评论的回复
	 * @param userId
	 * @return
	 */
	List<Map<String,Object>> getCommentReplyListByTargetUserId(int targetUserId, int begin);
	
	/**
	 * 根据用户id查询总的回复数
	 */
	int getCommentReplyListByTargetUserIdTotle(int targetUserId);
	
	/**
	 * 根据用户id修改已读状态
	 */
	int changeCommentUnreadStatus(int userId);
	
	/**
	 * 添加浏览记录信息
	 * @param userId 
	 * @param articleId
	 * @return
	 */
	int addArticleOpenLog(int userId, String articleId);

	/**
	 * 根据文章id查询浏览次数和回复数
	 * @param articleId
	 * @return map key: openLogNum, commentNum
	 */
	Map<String, Object> queryOpenLogNumAndCommentNumByArticleId(String articleId);
	
	/**
	 * 根据userid查询浏览记录
	 * @param userId
	 * @param page
	 * @param row
	 * @return
	 */
	List<Map<String,Object>> getArticleOpenLogListByUserId(int userId, int page, int row);

	int articleOpenLogInfoListCount(int userId);
	
	/**
	 * 查询全部浏览记录
	 * @param page
	 * @param row
	 * @return
	 */
	List<Map<String,Object>> getAllArticleOpenLogListForOverView(int page, int row);
	
	int getAllArticleOpenLogListForOverViewCount();
}
